#include <iostream>
using namespace std;
const int N = 550;
int a[N][N];
void slove(int x, int y, int r, int z) {
    int len = 2 * r + 1;
    int temp[N][N];

    // 拷贝子区域
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len; j++) {
            temp[i][j] = a[x - r + i][y - r + j];
        }
    }

    // 旋转并写回
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len; j++) {
            if (z == 0) {
                // 顺时针： (i, j) -> (j, len - 1 - i)
                a[x - r + j][y - r + (len - 1 - i)] = temp[i][j];
            } else {
                // 逆时针： (i, j) -> (len - 1 - j, i)
                a[x - r + (len - 1 - j)][y - r + i] = temp[i][j];
            }
        }
    }
}

int main() {
    int n, m;
    cin >> n >> m;
    int k = 1;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            a[i][j] = k++;
        }
    }
    for(int i = 0; i < m; i++) {
        int x, y, r, z;
        cin >> x >> y >> r >> z;
        slove(x, y, r, z);
    }
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}